package com.yuandian.management.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.yuandian.bpm.common.core.util.R;
import com.yuandian.management.vo.AgentStatusInfoDto;
import com.yuandian.management.vo.AgentStatusInfoParams;
import com.yuandian.management.vo.AgentStatusInfoPojo;
import com.yuandian.management.vo.AgentStatusInfoVo;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * Agent状态信息表 服务类
 * </p>
 *
 * @author fucx
 * @since 2021-01-27
 */
public interface IAgentStatusInfoService extends IService<AgentStatusInfoPojo> {
	/**
     * 保存agent状态信息
     * 
     * @param apdtos
     * @param request
     * @throws Exception
     */
    void handleAgentStatusInfo(AgentStatusInfoDto[] apdtos, HttpServletRequest request);

    /**
     * 前端删除agent的时候查询十分钟该agent是否有数据，有就不能逻辑删除
     * 
     * @param map
     * @return
     */
    List<AgentStatusInfoVo> countTenMinuteGroupByIp(Map map);

    /**
     * 统计断采个数、异常个数、正常个数
     * 
     * @param map
     * @return
     */
    List<AgentStatusInfoVo> countByAgentStatus();

    /**
     * 查询当天的信息，按ip分组统计，参数是状态
     * 
     * @param ap
     * @return
     */
    public R queryListGroupByIpAndAgentStatus(AgentStatusInfoParams ap);

    /**
     * 查询当天的信息，按ip和状态查询
     * 
     * @param ap
     *
     * @return
     */
    public R queryListByIpAndAgentStatus( AgentStatusInfoParams ap);

    /**
     * 更新当天的不参加top展示的断采信息
     * 
     * @param agentIp
     * @return
     */
    int updateCollectTopStatusByIp(String agentIp);

    /**
     * 前端操作，根据ip过滤掉当前的异常top排名
     * 
     * @param agentIp
     * @return
     */
    int updateWrongTopStatusByIp(String agentIp);

    /**
     * 前端获取最新的一个agent详情
     * 
     * @param ap
     * @return
     */
    public AgentStatusInfoVo getAgentDetail(AgentStatusInfoPojo ap);


    /**
     * 根据ip获取该ip历史启动时间
     * 
     * @param agentIp
     * @return
     */
    public List<AgentStatusInfoVo> rebootHistoryTime(String agentIp);

    /**
     * 获取探针部署ip
     * 
     * @param moduleName
     * @return
     */
    public List<String> getModuleManagement(String moduleName);
    
    /**
     * 统计agent状态个数
     * 
     * @return
     */
    public R getAgentCount();
    
    /**
     * 查询断采top数据
     * 
     * @return
     */
    public R getBreakTop();

    /**
     * 查询异常top数据
     * 
     * @return
     */
    public R getWrongTop();
    
    /**
     * 丢包率历史曲线图
     * 
     * @param params
     * @return
     */
    public R lostHistoryLine(AgentStatusInfoParams params);

    /**
     * 流量历史曲线图
     * 
     * @param params
     * @return
     */
    public R speedHistoryLine(AgentStatusInfoParams params);
    
}
